<?php
// src/Pyaf/GymBundle/Controller/AdminAlumnoController.php
namespace Pyaf\GymBundle\Controller;

use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\Response;
use Pyaf\GymBundle\Entity\Profesor;

use Pyaf\GymBundle\Form\ProfesorType;


/**
 * Description of AdminProfesorController
 *
 * @author Eduardo Diturbide
 */

class AdminProfesorController extends Controller
{   
    
    private $profesorDoctrine;
    
    public function setProfesorDoctrine() {
        $this->profesorDoctrine = $this->getDoctrine()->getEntityManager();        
    }

    public function listAction() {
        $this->setProfesorDoctrine();
        $profesores = $this->profesorDoctrine->getRepository('PyafGymBundle:Profesor')->findAllOrderByNombre();
        
        return $this->render('PyafGymBundle:AdminProfesor:list.html.twig', array('profesores' => $profesores));
    }
    
    public function newAction() {
        
        $peticion = $this->getRequest();
                
        $profesor = new Profesor();     
        $form = $this->createForm(new ProfesorType(), $profesor);
        
        if ($peticion->getMethod() == 'POST') {
            $form->bindRequest($peticion);
            if ($form->isValid()) {
                $em = $this->getDoctrine()->getEntityManager();
                $profesor = $form->getData();      
                
                $factory = $this->get('security.encoder_factory');
                $encoder = $factory->getEncoder($profesor);
                $password = $encoder->encodePassword($profesor->getPassword(), $profesor->getSalt());
                $profesor->setPassword($password);
                
                $profesor->getPersona()->setHabilitado(true);
                $em->persist($profesor);
                $em->flush();
                
                $this->get('session')
                         ->setFlash(
                                        'alertaAdminProfesorSuccess',
                                        'El nuevo profesor ('.$profesor->getNombreCompleto().') ha sido dado alta correctamente!'
                                    );
                
                return $this->redirect($this->generateUrl('admin_profesores_list'));
            } 
        }
        
        return $this->render('PyafGymBundle:AdminProfesor:new.html.twig', array(
            'form' => $form->createView(),
        ));
    }
    
    public function editAction($id)
    {
        $peticion = $this->get('request');
        $em = $this->getDoctrine()->getEntityManager();
        $profesor = $em->getRepository('PyafGymBundle:Profesor')->findProfesor($id);
        if (null == $profesor) {
            throw new NotFoundHttpException('No existe el profesor que se quiere modificar');
        }

        $formulario = $this->createForm(new ProfesorType(), $profesor);
         $habilitado = $profesor->getPersona()->getHabilitado();
        $formulario->setData($profesor);

        if ($peticion->getMethod() == 'POST') {
            $formulario->bindRequest($peticion);

            if ($formulario->isValid()) {
                $factory = $this->get('security.encoder_factory');
                $encoder = $factory->getEncoder($profesor);
                $password = $encoder->encodePassword($profesor->getPassword(), $profesor->getSalt());
                $profesor->setPassword($password);
                
                $profesor->getPersona()->setHabilitado($habilitado);
                
                $em->persist($profesor);
                $em->flush();
                
                $this->get('session')
                         ->setFlash(
                                        'alertaAdminProfesorSuccess',
                                        'El profesor ('.$profesor->getNombreCompleto().') ha sido modificado correctamente!'
                                    );
                
                return $this->redirect($this->generateUrl('admin_profesores_list'));
            }
        }

        return $this->render('PyafGymBundle:AdminProfesor:edit.html.twig', array(
            'formulario' => $formulario->createView(),
            'profesor'   => $profesor
        ));
    }
    
    public function disableAction($id)
    {
        $em = $this->getDoctrine()->getEntityManager();
        $profesor = $em->find('PyafGymBundle:Profesor', $id);
        if (null == $profesor) {
            throw new NotFoundHttpException('No existe el profesor que se quiere modificar');
        } else {  
            $persona = $profesor->getPersona();
            $persona->setHabilitado(!$profesor->getPersona()->getHabilitado());
            $profesor->setPersona($persona);
            $em->getRepository('PyafGymBundle:Profesor')->save($profesor);
            
            if($profesor->getPersona()->getHabilitado()){
                $this->get('session')
                         ->setFlash(
                                        'alertaAdminProfesorSuccess',
                                        'El profesor ('.$profesor->getNombreCompleto().') ha sido habilitado correctamente!'
                                    );
            } else{
                $this->get('session')
                         ->setFlash(
                                        'alertaAdminProfesorError',
                                        'El profesor ('.$profesor->getNombreCompleto().') ha sido inhabilitado correctamente!'
                                    );
            }
        }       

        return $this->redirect($this->generateUrl('admin_profesores_list'));
    }
    
    public function showAction($id){        
        $profesor = new Profesor(); 
        $profesor = $this->getDoctrine()->getEntityManager()
                         ->getRepository('PyafGymBundle:Profesor')
                         ->findProfesor($id);
        
        $profesor->getPersona()
                ->setEdad($this->calculaedad(
                        $profesor->getPersona()->getFechaNacimiento()->format('Y-m-d')
                        )
                    );
        
        return $this->render('PyafGymBundle:AdminProfesor:info.html.twig', array('profesor' => $profesor));
    }
    
    public function asistenciaAction() {
        $em = $this->getDoctrine()->getEntityManager();
        $profesores = $em->getRepository('PyafGymBundle:Profesor')->findAll();
        
        return $this->render('PyafGymBundle:AdminProfesor:listAsistencia.html.twig',
                array('profesores' => $profesores));
    }
    
    public function asistenciaShowAction($id) {
        $em = $this->getDoctrine()->getEntityManager();
        $profesor = $em->getRepository('PyafGymBundle:Profesor')->find($id);
        $asistenciaList = $em->getRepository('PyafGymBundle:Asistencia')->findAsistenciaByProfesor($id);
        
        return $this->render('PyafGymBundle:AdminProfesor:asistencia.html.twig',
                array('asistenciaList' => $asistenciaList, 'profesor' => $profesor));
    }
            
    function calculaedad($fechanacimiento){
        
        list($ano,$mes,$dia) = explode("-", $fechanacimiento);
        
        $ano_diferencia = date("Y") - $ano;
        $mes_diferencia = date("m") - $mes;
        $dia_diferencia = date("d") - $dia;
        if ($dia_diferencia < 0 || $mes_diferencia < 0)
            $ano_diferencia--;
        
        return $ano_diferencia;
    }
    
    function validateUserAction() {
        $peticion = $this->getRequest();
        $em = $this->getDoctrine()->getEntityManager();
        $exist = false;
        $option = $peticion->request->get('option');
        $profesor = new Profesor();
        switch ($option) {
            case 'dni':
                {   $dni = $peticion->request->get('dni');
                    $profesor = $em->getRepository('PyafGymBundle:Profesor')->findUserDni($dni);
                    break;
                }
            case 'username':
                {   $userName = $peticion->request->get('userName');
                    $profesor = $em->getRepository('PyafGymBundle:Profesor')->findUserNameProfesor($userName);
                    break;
                }
            default:
                break;
        }

        if (!empty($profesor)) {
            $exist = true;
        }
        
        $jsonData = json_encode(array('success' => true, 'exist' => $exist));
        $response = new Response($jsonData);
        return $response;
        
    }
}

?>
